/**
 * 是否为素数
 * 素数有4个特征
 * 1. 只有1和自身能被其整除
 * 2. 该数的平方根范围内，没有任何因数
 * 3. 不能是2之外的偶数
 * 4. 任何>=5的素数，都和6的倍数相邻
 */
class Prime {
    constructor() {}

    isPrime(n) {
        if (n <= 3 && n > 0) return true;
        if (n % 2 === 0) return false;

        if (n >= 5) {
            if ((n + 1) % 6 != 0 && (n - 1) % 6 != 0) return false;
        }

        let isPrimeFlag = true;
        for (let i = 5; i < Math.ceil(Math.sqrt(n)); i += 6) {
            if (n % i === 0 || n % (i + 2) === 0) {
                isPrimeFlag = false;
                break;
            }
        }

        return isPrimeFlag;
    }
}

// test
console.time('default');

const prime = new Prime();
for (let i = 0; i < 100; i++) {
    if (prime.isPrime(i)) {
        console.log(`isPrime ${i}`);
    }
}

console.timeEnd('default');
